package cn.demoncat.util.zookeeper.entity;

import org.apache.curator.framework.CuratorFramework;

/**
 * ZK 分布式锁执行的任务
 * 
 * @author 延晓磊
 *
 * @since 2018年11月3日
 */
public interface ZkLockTask<T>{

	/**
	 * 获取锁后执行的任务
	 * 
	 * @param conn	ZK连接
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2018年11月3日
	 */
    T execute(CuratorFramework conn);
	
	/**
	 * 获取锁失败时执行的任务
	 * 
	 * @param conn	ZK连接
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2018年11月3日
	 */
    T failLock(CuratorFramework conn);
 
	/**
	 * 释放锁后执行的任务(用于顺序执行锁)
	 * 
	 * @param conn	ZK连接
	 * @param isSuccess	是否执行成功后释放锁（如果执行中抛异常则为false）
	 * @return
	 * 
	 * @author 延晓磊
	 *
	 * @since 2018年11月3日
	 */
	default void afterLock(CuratorFramework conn, boolean isSuccess) {
		// 释放锁
	}
}
